package ar.com.sne.model.service.geo;

import java.util.List;

import org.springframework.stereotype.Service;

import foundation.common.util.BusinessException;
import foundation.common.util.CommonGeneralUtil;
import foundation.common.util.FinderFilter;
import foundation.common.util.PagedFinder;
import ar.com.sne.model.bo.geo.GeoTelefono;
import ar.com.sne.model.dao.factory.GeoDAOFactory;
import ar.com.sne.model.dao.factory.PerDAOFactory;
import ar.com.sne.util.SNeHibernateUtil;

@Service("geoTelefonoService")
public class GeoTelefonoServiceImpl implements GeoTelefonoService{
	
	private GeoDAOFactory geoTelefonoDAO;
	
   	
	public void delete(GeoTelefono geoTelefono) {
		validacionDelete(geoTelefono);
		SNeHibernateUtil.currentSession().getTransaction().begin();
		geoTelefonoDAO.getGeoTelefonoDAO().delete(geoTelefono);
		SNeHibernateUtil.currentSession().getTransaction().commit();
	}


	public List<GeoTelefono> findAll() {
		return geoTelefonoDAO.getGeoTelefonoDAO().findAll();
	}		

	
	public GeoTelefono findById(Long id) {
		return (GeoTelefono) geoTelefonoDAO.getGeoTelefonoDAO().getById(id);
	}


	public void save(GeoTelefono geoTelefono) {
		if(geoTelefono.getId() == null) {
			validacionCreate(geoTelefono);
		} else {
			validacionUpdate(geoTelefono);
		}
		SNeHibernateUtil.currentSession().getTransaction().begin();
		geoTelefonoDAO.getGeoTelefonoDAO().save(geoTelefono);
		SNeHibernateUtil.currentSession().getTransaction().commit();
	}
	
	
	public List<GeoTelefono> find(FinderFilter filter) {
	
		return geoTelefonoDAO.getGeoTelefonoDAO().find(filter);
	}
	

	public PagedFinder findPaging(PagedFinder pf) {
		return geoTelefonoDAO.getGeoTelefonoDAO().findPaging(pf);
	}

	
	/**
	 * Validaciones de negocio pre-delete Si al realizar la validacion la misma
	 * no pasa, se lanza una BusinessException
	 * 
	 * @param geoTelefono
	 *            la instancia a validar antes de ser borrada
	 */
	private void validacionDelete(GeoTelefono geoTelefono) {
		BusinessException be = new BusinessException();
		
		CommonGeneralUtil.throwBussinesException(be);
	}
	
	/**
	 * Validaciones de negocio pre-update Si al realizar la validacion la misma
	 * no pasa, se lanza una BusinessException
	 * 
	 * @param geoTelefono
	 *            la instancia a validar antes de ser modificada
	 */
	private void validacionUpdate(GeoTelefono geoTelefono) {
		BusinessException be = new BusinessException();
		
		//valida que el codigo no sea duplicado
		FinderFilter filter = new FinderFilter();
//		filter.addFilter("codigo", geoTelefono.getCodigo());
//		filter.addFilter("idGeoTelefono", geoTelefono.getId());
//		List<GeoTelefono> geoTelefonoList = geoTelefonoDAO.find(filter);
//		if(geoTelefonoList.size()>0) //exite un tipo de movimiento de cta cte de poliza con el codigo pasado como parametro
//			be.addExceptionKey("GeoTelefono.validacionCreate.codigoDuplicado");
		
		CommonGeneralUtil.throwBussinesException(be);		
		
	}

	/**
	 * Validaciones de negocio pre-create Si al realizar la validacion la misma
	 * no pasa, se lanza una BusinessException
	 * 
	 * @param geoTelefono
	 *            la instancia a validar antes de ser creada
	 */
	private void validacionCreate(GeoTelefono geoTelefono) {
		BusinessException be = new BusinessException();
		
		CommonGeneralUtil.throwBussinesException(be);
	}
	
	
}
